{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Using TensorFlow backend.\n"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import os\n",
    "import keras\n",
    "import matplotlib.pyplot as plt\n",
    "from keras.layers import Dense,GlobalAveragePooling2D\n",
    "from keras.applications import VGG16\n",
    "from keras.preprocessing import image\n",
    "from keras.applications.mobilenet import preprocess_input\n",
    "from keras.preprocessing.image import ImageDataGenerator\n",
    "from keras.models import Model\n",
    "from keras.optimizers import Adam\n",
    "\n",
    "from datetime import datetime\n",
    "from UnetModel import *\n",
    "\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From C:\\Users\\li_ni\\Anaconda3\\lib\\site-packages\\tensorflow\\python\\framework\\op_def_library.py:263: colocate_with (from tensorflow.python.framework.ops) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Colocations handled automatically by placer.\n",
      "Downloading data from https://github.com/fchollet/deep-learning-models/releases/download/v0.1/vgg16_weights_tf_dim_ordering_tf_kernels_notop.h5\n",
      "58892288/58889256 [==============================] - 10s 0us/step\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\li_ni\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:58: UserWarning: Update your `Model` call to the Keras 2 API: `Model(inputs=Tensor(\"in..., outputs=Tensor(\"co...)`\n"
     ]
    }
   ],
   "source": [
    "#Load pre-trained model\n",
    "base_model=VGG16(weights='imagenet',include_top=False) #imports the vgg16 model and discards the last 1000 neuron layer.\n",
    "\n",
    "\n",
    "for layer in base_model.layers:\n",
    "    layer.trainable = False\n",
    "    \n",
    "x = base_model.output\n",
    "\n",
    "bottom_conv = Conv2D(1024, (3, 3), padding=\"same\")(x)\n",
    "bottom_acti = LeakyReLU(alpha=0.001)(bottom_conv)\n",
    "bottom_conv = Conv2D(1024, (3, 3), padding=\"same\")(bottom_acti)\n",
    "bottom_acti = LeakyReLU(alpha=0.001)(bottom_conv)\n",
    "\n",
    "# 14 x 14 block5\n",
    "left_block5 = base_model.get_layer('block5_conv3').output\n",
    "right_up5 = concatenate([UpSampling2D(size=(2, 2))(bottom_acti), left_block5], axis=3)\n",
    "right_conv5 = Conv2D(512, (3, 3), padding=\"same\")(right_up5)\n",
    "right_acti5 = LeakyReLU(alpha=0.001)(right_conv5)\n",
    "right_conv5 = Conv2D(512, (3, 3), padding=\"same\")(right_acti5)\n",
    "right_acti5 = LeakyReLU(alpha=0.001)(right_conv5)\n",
    "\n",
    "# 28 x 28 block4\n",
    "left_block4 = base_model.get_layer('block4_conv3').output\n",
    "right_up4 = concatenate([UpSampling2D(size=(2, 2))(right_acti5), left_block4], axis=3)\n",
    "right_conv4 = Conv2D(512, (3, 3), padding=\"same\")(right_up4)\n",
    "right_acti4 = LeakyReLU(alpha=0.001)(right_conv4)\n",
    "right_conv4 = Conv2D(512, (3, 3), padding=\"same\")(right_acti4)\n",
    "right_acti4 = LeakyReLU(alpha=0.001)(right_conv4)\n",
    "\n",
    "# 56 x 56 block3\n",
    "left_block3 = base_model.get_layer('block3_conv3').output\n",
    "right_up3 = concatenate([UpSampling2D(size=(2, 2))(right_acti4), left_block3], axis=3)\n",
    "right_conv3 = Conv2D(256, (3, 3), padding=\"same\")(right_up3)\n",
    "right_acti3 = LeakyReLU(alpha=0.001)(right_conv3)\n",
    "right_conv3 = Conv2D(256, (3, 3), padding=\"same\")(right_acti3)\n",
    "right_acti3 = LeakyReLU(alpha=0.001)(right_conv3)\n",
    "\n",
    "# 112 x 112 block2\n",
    "left_block2 = base_model.get_layer('block2_conv2').output\n",
    "right_up2 = concatenate([UpSampling2D(size=(2, 2))(right_acti3), left_block2], axis=3)\n",
    "right_conv2 = Conv2D(128, (3, 3), padding=\"same\")(right_up2)\n",
    "right_acti2 = LeakyReLU(alpha=0.001)(right_conv2)\n",
    "right_conv2 = Conv2D(128, (3, 3), padding=\"same\")(right_acti2)\n",
    "right_acti2 = LeakyReLU(alpha=0.001)(right_conv2)\n",
    "\n",
    "# 224 x 224 block1\n",
    "left_block1 = base_model.get_layer('block1_conv2').output\n",
    "right_up1 = concatenate([UpSampling2D(size=(2, 2))(right_acti2), left_block1], axis=3)\n",
    "right_conv1 = Conv2D(64, (3, 3), padding=\"same\")(right_up1)\n",
    "right_acti1 = LeakyReLU(alpha=0.001)(right_conv1)\n",
    "right_conv1 = Conv2D(64, (3, 3), padding=\"same\")(right_acti1)\n",
    "right_acti1 = LeakyReLU(alpha=0.001)(right_conv1)\n",
    "\n",
    "\n",
    "#Sigmoid\n",
    "output = Conv2D(1, (1, 1), activation='sigmoid')(right_acti1)\n",
    "model = Model(input=base_model.input, output=output)\n",
    "\n",
    "model.compile(optimizer=Adam(lr=1e-5), loss=jaccard_coef_loss, metrics=[jaccard_coef])\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/100\n",
      "Found 519 images belonging to 1 classes.\n",
      "Found 1555 images belonging to 1 classes.\n",
      "Found 519 images belonging to 1 classes.\n",
      "Found 1555 images belonging to 1 classes.\n",
      "300/300 [==============================] - 551s 2s/step - loss: -0.6085 - jaccard_coef: 0.6085 - val_loss: -0.7139 - val_jaccard_coef: 0.7139\n",
      "\n",
      "Epoch 00001: val_jaccard_coef improved from -inf to 0.71390, saving model to unet/20190523/unet_lesion_20190523_001-0.71390.hdf5\n",
      "Epoch 2/100\n",
      "262/300 [=========================>....] - ETA: 52s - loss: -0.7004 - jaccard_coef: 0.7004"
     ]
    }
   ],
   "source": [
    "img_rows = 224\n",
    "img_cols = 224\n",
    "\n",
    "data_gen_args = dict(\n",
    "#    samplewise_center = True,\n",
    "#    samplewise_std_normalization = True,\n",
    "    rotation_range=180,\n",
    "    width_shift_range=0.05,\n",
    "    height_shift_range=0.05,\n",
    "    shear_range=0.05,\n",
    "    zoom_range=0.05,\n",
    "    horizontal_flip=True,\n",
    "    vertical_flip = True,\n",
    "    fill_mode='nearest')\n",
    "\n",
    "#Validation data generation\n",
    "data_val_gen_args = dict(\n",
    "    #samplewise_center = True,\n",
    "    #samplewise_std_normalization = True\n",
    "    )\n",
    "\n",
    "#Setup generator\n",
    "batch_size = 6\n",
    "      \n",
    "myGene = trainGenerator(batch_size,'data/train','images','masks',data_gen_args, target_size= (img_rows,img_rows))\n",
    "myValGene = validationGenerator(batch_size,'data/val','images','masks',data_val_gen_args, target_size= (img_rows,img_rows))\n",
    "\n",
    "#Create folder for models\n",
    "date_object = datetime.now()\n",
    "# convert object to the format we want\n",
    "formatted_date = date_object.strftime('%Y%m%d')\n",
    "output_dir = 'unet/{}'.format(formatted_date)\n",
    "os.makedirs(output_dir, exist_ok =True)\n",
    "\n",
    "#Setup Checkpoint to only capture best estimate\n",
    "model_checkpoint = ModelCheckpoint('{}/unet_lesion_{}_{{epoch:03d}}-{{val_jaccard_coef:.5f}}.hdf5'.format(output_dir, formatted_date)\n",
    "                                   , monitor='val_jaccard_coef'\n",
    "                                   ,verbose=1, mode='max', save_best_only=True)\n",
    "\n",
    "iterations = 100\n",
    "#Train\n",
    "history = model.fit_generator(\n",
    "    myGene,\n",
    "    steps_per_epoch = 300, \n",
    "    epochs=iterations,\n",
    "    callbacks=[model_checkpoint],\n",
    "    validation_data=myValGene,\n",
    "    validation_steps=100)\n",
    "\n",
    "model.save(os.path.join(output_dir, 'iter_{}'.format(iterations)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Plot training & validation accuracy values\n",
    "plt.plot(history.history['jaccard_coef'])\n",
    "plt.plot(history.history['val_jaccard_coef'])\n",
    "plt.title('Coefficiency')\n",
    "plt.ylabel('Coefficiency')\n",
    "plt.xlabel('Epoch')\n",
    "plt.legend(['Train'], loc='upper left')\n",
    "plt.legend(['Validation'], loc='upper left')\n",
    "plt.show()\n",
    "\n",
    "# Plot training & validation loss values\n",
    "plt.plot(history.history['loss'])\n",
    "plt.plot(history.history['val_loss'])\n",
    "plt.title('Model loss')\n",
    "plt.ylabel('Loss')\n",
    "plt.xlabel('Epoch')\n",
    "plt.legend(['Train'], loc='upper left')\n",
    "plt.legend(['Validation'], loc='upper left')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training co-effiency    : 0.8577200777370837;\n",
      "Validation co-effiency : 0.7753131805951871\n"
     ]
    }
   ],
   "source": [
    "coef = np.array(history.history['jaccard_coef'])\n",
    "val_coef = np.array(history.history['val_jaccard_coef'])\n",
    "print(\"Training co-effiency    : {};\\nValidation co-effiency : {}\".format(coef[coef==max(coef)][0], val_coef[np.argmax(coef)]))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "ISIC_0015208.jpg -- jaccard index: 0.9540793895721436\n",
      "ISIC_0014110.jpg -- jaccard index: 0.9293732047080994\n",
      "ISIC_0015207.jpg -- jaccard index: 0.7073414921760559\n",
      "ISIC_0009951.jpg -- jaccard index: 0.802521288394928\n",
      "ISIC_0000365.jpg -- jaccard index: 0.9101837277412415\n",
      "ISIC_0014092.jpg -- jaccard index: 0.8402589559555054\n",
      "ISIC_0014855.jpg -- jaccard index: 0.8161075115203857\n",
      "ISIC_0011166.jpg -- jaccard index: 0.7711727023124695\n",
      "ISIC_0010599.jpg -- jaccard index: 0.9396867752075195\n",
      "ISIC_0000484.jpg -- jaccard index: 0.8141406774520874\n",
      "ISIC_0010474.jpg -- jaccard index: 0.9415503144264221\n",
      "ISIC_0012706.jpg -- jaccard index: 0.2480030655860901\n",
      "ISIC_0010067.jpg -- jaccard index: 0.831932544708252\n",
      "ISIC_0015229.jpg -- jaccard index: 0.7654320597648621\n",
      "ISIC_0015568.jpg -- jaccard index: 0.8696528077125549\n",
      "ISIC_0015973.jpg -- jaccard index: 0.9210171103477478\n",
      "ISIC_0012713.jpg -- jaccard index: 0.7089471220970154\n",
      "ISIC_0015152.jpg -- jaccard index: 0.6779975295066833\n",
      "ISIC_0012216.jpg -- jaccard index: 0.5718472003936768\n",
      "ISIC_0015190.jpg -- jaccard index: 0.8490692973136902\n",
      "ISIC_0000006.jpg -- jaccard index: 0.8206939101219177\n",
      "ISIC_0012777.jpg -- jaccard index: 0.9162595868110657\n",
      "ISIC_0012720.jpg -- jaccard index: 0.8355124592781067\n",
      "ISIC_0000543.jpg -- jaccard index: 0.7849254608154297\n",
      "ISIC_0010602.jpg -- jaccard index: 0.9534434080123901\n",
      "ISIC_0001367.jpg -- jaccard index: 0.8645626306533813\n",
      "ISIC_0005247.jpg -- jaccard index: 0.7798325419425964\n",
      "ISIC_0009160.jpg -- jaccard index: 0.856269359588623\n",
      "ISIC_0010367.jpg -- jaccard index: 0.8439685106277466\n",
      "ISIC_0013996.jpg -- jaccard index: 0.879148542881012\n",
      "ISIC_0000494.jpg -- jaccard index: 0.8265082836151123\n",
      "ISIC_0000361.jpg -- jaccard index: 0.9190472364425659\n",
      "ISIC_0013288.jpg -- jaccard index: 0.7059448957443237\n",
      "ISIC_0002647.jpg -- jaccard index: 0.8719478845596313\n",
      "ISIC_0012987.jpg -- jaccard index: 0.7166820168495178\n",
      "ISIC_0010364.jpg -- jaccard index: 0.9010676145553589\n",
      "ISIC_0014136.jpg -- jaccard index: 0.7639877200126648\n",
      "ISIC_0011117.jpg -- jaccard index: 0.2866322994232178\n",
      "ISIC_0014601.jpg -- jaccard index: 0.6119298338890076\n",
      "ISIC_0011382.jpg -- jaccard index: 0.9078144431114197\n",
      "ISIC_0000092.jpg -- jaccard index: 0.8360586166381836\n",
      "ISIC_0012378.jpg -- jaccard index: 0.8893263339996338\n",
      "ISIC_0012681.jpg -- jaccard index: 0.9350001811981201\n",
      "ISIC_0013970.jpg -- jaccard index: 0.6293905377388\n",
      "ISIC_0000066.jpg -- jaccard index: 0.9402260780334473\n",
      "ISIC_0014458.jpg -- jaccard index: 0.911940336227417\n",
      "ISIC_0013867.jpg -- jaccard index: 0.8357478380203247\n",
      "ISIC_0003174.jpg -- jaccard index: 0.6702424883842468\n",
      "ISIC_0001242.jpg -- jaccard index: 0.9203409552574158\n",
      "ISIC_0000490.jpg -- jaccard index: 0.8973441123962402\n",
      "ISIC_0013114.jpg -- jaccard index: 0.8587725162506104\n",
      "ISIC_0002206.jpg -- jaccard index: 0.8368566632270813\n",
      "ISIC_0000541.jpg -- jaccard index: 0.8416831493377686\n",
      "ISIC_0013369.jpg -- jaccard index: 0.8804288506507874\n",
      "ISIC_0015974.jpg -- jaccard index: 0.8803490400314331\n",
      "ISIC_0014753.jpg -- jaccard index: 0.9224427342414856\n",
      "ISIC_0011344.jpg -- jaccard index: 0.928924024105072\n",
      "ISIC_0000049.jpg -- jaccard index: 0.8120968341827393\n",
      "ISIC_0013581.jpg -- jaccard index: 0.6564379334449768\n",
      "ISIC_0006711.jpg -- jaccard index: 0.7412586808204651\n",
      "ISIC_0010251.jpg -- jaccard index: 0.899691104888916\n",
      "ISIC_0000125.jpg -- jaccard index: 0.8850210309028625\n",
      "ISIC_0009884.jpg -- jaccard index: 0.8998772501945496\n",
      "ISIC_0009940.jpg -- jaccard index: 0.8801250457763672\n",
      "ISIC_0013942.jpg -- jaccard index: 0.5016765594482422\n",
      "ISIC_0010171.jpg -- jaccard index: 0.9247002005577087\n",
      "ISIC_0016064.jpg -- jaccard index: 0.8817324042320251\n",
      "ISIC_0014857.jpg -- jaccard index: 0.9188647270202637\n",
      "ISIC_0000549.jpg -- jaccard index: 0.8539679646492004\n",
      "ISIC_0015193.jpg -- jaccard index: 0.9486947655677795\n",
      "ISIC_0014713.jpg -- jaccard index: 0.6286949515342712\n",
      "ISIC_0013027.jpg -- jaccard index: 0.7825524806976318\n",
      "ISIC_0014743.jpg -- jaccard index: 0.7949243783950806\n",
      "ISIC_0011362.jpg -- jaccard index: 0.7866140007972717\n",
      "ISIC_0015312.jpg -- jaccard index: 0.9195759296417236\n",
      "ISIC_0015368.jpg -- jaccard index: 0.9654891490936279\n",
      "ISIC_0002616.jpg -- jaccard index: 0.7887094616889954\n",
      "ISIC_0012678.jpg -- jaccard index: 0.780582070350647\n",
      "ISIC_0012320.jpg -- jaccard index: 0.8644900918006897\n",
      "ISIC_0013713.jpg -- jaccard index: 0.8332775235176086\n",
      "ISIC_0014692.jpg -- jaccard index: 0.891872763633728\n",
      "ISIC_0014739.jpg -- jaccard index: 0.8945281505584717\n",
      "ISIC_0012711.jpg -- jaccard index: 0.5819606781005859\n",
      "ISIC_0015946.jpg -- jaccard index: 0.9187136888504028\n",
      "ISIC_0009201.jpg -- jaccard index: 0.8930215835571289\n",
      "ISIC_0010237.jpg -- jaccard index: 0.8509450554847717\n",
      "ISIC_0001186.jpg -- jaccard index: 0.9064477682113647\n",
      "ISIC_0012705.jpg -- jaccard index: 0.27674970030784607\n",
      "ISIC_0014525.jpg -- jaccard index: 0.3548555076122284\n",
      "ISIC_0000350.jpg -- jaccard index: 0.9511066675186157\n",
      "ISIC_0012852.jpg -- jaccard index: 0.711557149887085\n",
      "ISIC_0015955.jpg -- jaccard index: 0.7465006709098816\n",
      "ISIC_0003056.jpg -- jaccard index: 0.588904857635498\n",
      "ISIC_0010010.jpg -- jaccard index: 0.8750007748603821\n",
      "ISIC_0010497.jpg -- jaccard index: 0.8571293950080872\n",
      "ISIC_0010191.jpg -- jaccard index: 0.88167804479599\n",
      "ISIC_0012211.jpg -- jaccard index: 0.9336254596710205\n",
      "ISIC_0015941.jpg -- jaccard index: 0.8780540823936462\n",
      "ISIC_0000260.jpg -- jaccard index: 0.87766432762146\n",
      "ISIC_0016050.jpg -- jaccard index: 0.9323394894599915\n",
      "ISIC_0014173.jpg -- jaccard index: 0.6987602710723877\n",
      "ISIC_0009941.jpg -- jaccard index: 0.9405758380889893\n",
      "ISIC_0015215.jpg -- jaccard index: 0.9009305834770203\n",
      "ISIC_0012956.jpg -- jaccard index: 0.7326355576515198\n",
      "ISIC_0011213.jpg -- jaccard index: 0.7676088213920593\n",
      "ISIC_0000163.jpg -- jaccard index: 0.8429991602897644\n",
      "ISIC_0010213.jpg -- jaccard index: 0.8312109112739563\n",
      "ISIC_0016003.jpg -- jaccard index: 0.8640323877334595\n",
      "ISIC_0014694.jpg -- jaccard index: 0.9518045783042908\n",
      "ISIC_0013304.jpg -- jaccard index: 0.5290185213088989\n",
      "ISIC_0013839.jpg -- jaccard index: 0.8114823698997498\n",
      "ISIC_0014983.jpg -- jaccard index: 0.9113081693649292\n",
      "ISIC_0000503.jpg -- jaccard index: 0.9602319598197937\n",
      "ISIC_0000202.jpg -- jaccard index: 0.9085034728050232\n",
      "ISIC_0000425.jpg -- jaccard index: 0.9378696084022522\n",
      "ISIC_0013216.jpg -- jaccard index: 0.9265374541282654\n",
      "ISIC_0000215.jpg -- jaccard index: 0.9145057201385498\n",
      "ISIC_0013794.jpg -- jaccard index: 0.9320279955863953\n",
      "ISIC_0013001.jpg -- jaccard index: 0.222259059548378\n",
      "ISIC_0014956.jpg -- jaccard index: 0.8522031307220459\n",
      "ISIC_0015044.jpg -- jaccard index: 0.9018913507461548\n",
      "ISIC_0000048.jpg -- jaccard index: 0.9179180860519409\n",
      "ISIC_0015279.jpg -- jaccard index: 0.8236721754074097\n",
      "ISIC_0009902.jpg -- jaccard index: 0.8569894433021545\n",
      "ISIC_0014775.jpg -- jaccard index: 0.6460686922073364\n",
      "ISIC_0014546.jpg -- jaccard index: 0.7818329930305481\n",
      "ISIC_0000036.jpg -- jaccard index: 0.9627476930618286\n",
      "ISIC_0014787.jpg -- jaccard index: 0.8361786007881165\n",
      "ISIC_0014985.jpg -- jaccard index: 0.6818560361862183\n",
      "ISIC_0013311.jpg -- jaccard index: 0.8607311844825745\n",
      "ISIC_0012342.jpg -- jaccard index: 0.446353554725647\n",
      "ISIC_0014545.jpg -- jaccard index: 0.9608670473098755\n",
      "ISIC_0014665.jpg -- jaccard index: 0.9052476286888123\n",
      "ISIC_0007344.jpg -- jaccard index: 0.9133898615837097\n",
      "ISIC_0013807.jpg -- jaccard index: 0.7915624976158142\n",
      "ISIC_0000243.jpg -- jaccard index: 0.950201153755188\n",
      "ISIC_0012990.jpg -- jaccard index: 0.920181155204773\n",
      "ISIC_0012699.jpg -- jaccard index: 0.9154928922653198\n",
      "ISIC_0013962.jpg -- jaccard index: 0.8029718995094299\n",
      "ISIC_0010598.jpg -- jaccard index: 0.928305983543396\n",
      "ISIC_0010256.jpg -- jaccard index: 0.8181247115135193\n",
      "ISIC_0014947.jpg -- jaccard index: 0.9573521614074707\n",
      "ISIC_0010849.jpg -- jaccard index: 0.808713972568512\n",
      "ISIC_0013712.jpg -- jaccard index: 0.8202947378158569\n",
      "ISIC_0001128.jpg -- jaccard index: 0.8510519862174988\n",
      "ISIC_0011343.jpg -- jaccard index: 0.8895443081855774\n",
      "ISIC_0000060.jpg -- jaccard index: 0.7820970416069031\n",
      "ISIC_0012901.jpg -- jaccard index: 0.9150810837745667\n",
      "ISIC_0014951.jpg -- jaccard index: 0.9505480527877808\n",
      "ISIC_0014336.jpg -- jaccard index: 0.5013049840927124\n",
      "ISIC_0005000.jpg -- jaccard index: 0.9486923813819885\n",
      "ISIC_0016028.jpg -- jaccard index: 0.4988141655921936\n",
      "ISIC_0010025.jpg -- jaccard index: 0.9150148034095764\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "ISIC_0015593.jpg -- jaccard index: 0.5978150963783264\n",
      "ISIC_0000421.jpg -- jaccard index: 0.9157114028930664\n",
      "ISIC_0012487.jpg -- jaccard index: 0.6873704195022583\n",
      "ISIC_0007156.jpg -- jaccard index: 0.8383557796478271\n",
      "ISIC_0015160.jpg -- jaccard index: 0.883951723575592\n",
      "ISIC_0001212.jpg -- jaccard index: 0.7598267793655396\n",
      "ISIC_0003805.jpg -- jaccard index: 0.8020504117012024\n",
      "ISIC_0015607.jpg -- jaccard index: 0.5557745695114136\n",
      "ISIC_0010584.jpg -- jaccard index: 0.7625454664230347\n",
      "ISIC_0013189.jpg -- jaccard index: 0.5874019861221313\n",
      "ISIC_0000228.jpg -- jaccard index: 0.9561255574226379\n",
      "ISIC_0000047.jpg -- jaccard index: 0.8872924447059631\n",
      "ISIC_0011109.jpg -- jaccard index: 0.8685506582260132\n",
      "ISIC_0000486.jpg -- jaccard index: 0.9509697556495667\n",
      "ISIC_0012680.jpg -- jaccard index: 0.940122127532959\n",
      "ISIC_0014805.jpg -- jaccard index: 0.906254768371582\n",
      "ISIC_0008998.jpg -- jaccard index: 0.8833758234977722\n",
      "ISIC_0013249.jpg -- jaccard index: 0.7694524526596069\n",
      "ISIC_0000510.jpg -- jaccard index: 0.8994852900505066\n",
      "ISIC_0010327.jpg -- jaccard index: 0.8030956387519836\n",
      "ISIC_0013929.jpg -- jaccard index: 0.30273497104644775\n",
      "ISIC_0000012.jpg -- jaccard index: 0.8636917471885681\n",
      "ISIC_0000226.jpg -- jaccard index: 0.8089959621429443\n",
      "ISIC_0012700.jpg -- jaccard index: 0.928580641746521\n",
      "ISIC_0011157.jpg -- jaccard index: 0.9528894424438477\n",
      "ISIC_0001204.jpg -- jaccard index: 0.8279715776443481\n",
      "ISIC_0010263.jpg -- jaccard index: 0.9054185152053833\n",
      "ISIC_0000380.jpg -- jaccard index: 0.9366228580474854\n",
      "ISIC_0014846.jpg -- jaccard index: 0.9612771272659302\n",
      "ISIC_0013306.jpg -- jaccard index: 0.0008037294028326869\n",
      "ISIC_0015998.jpg -- jaccard index: 0.782759964466095\n",
      "ISIC_0010015.jpg -- jaccard index: 0.9327866435050964\n",
      "ISIC_0002780.jpg -- jaccard index: 0.904089093208313\n",
      "ISIC_0015108.jpg -- jaccard index: 0.800820529460907\n",
      "ISIC_0014826.jpg -- jaccard index: 0.8997666835784912\n",
      "ISIC_0012944.jpg -- jaccard index: 0.8097923398017883\n",
      "ISIC_0014073.jpg -- jaccard index: 0.8288117051124573\n",
      "ISIC_0012376.jpg -- jaccard index: 0.7844222784042358\n",
      "ISIC_0010322.jpg -- jaccard index: 0.7469074130058289\n",
      "ISIC_0014311.jpg -- jaccard index: 0.3165156841278076\n",
      "ISIC_0000085.jpg -- jaccard index: 0.9233604073524475\n",
      "ISIC_0000216.jpg -- jaccard index: 0.9542805552482605\n",
      "ISIC_0012749.jpg -- jaccard index: 0.3027535080909729\n",
      "ISIC_0000352.jpg -- jaccard index: 0.9237139821052551\n",
      "ISIC_0009987.jpg -- jaccard index: 0.8110541701316833\n",
      "ISIC_0001103.jpg -- jaccard index: 0.8889190554618835\n",
      "ISIC_0009533.jpg -- jaccard index: 0.8246961832046509\n",
      "ISIC_0013414.jpg -- jaccard index: 0.32969531416893005\n",
      "ISIC_0002438.jpg -- jaccard index: 0.8738024830818176\n",
      "ISIC_0014760.jpg -- jaccard index: 0.9675041437149048\n",
      "ISIC_0000170.jpg -- jaccard index: 0.736946165561676\n",
      "ISIC_0013235.jpg -- jaccard index: 0.9380812048912048\n",
      "ISIC_0013227.jpg -- jaccard index: 0.7217027544975281\n",
      "ISIC_0011081.jpg -- jaccard index: 0.742874026298523\n",
      "ISIC_0009896.jpg -- jaccard index: 0.6540175080299377\n",
      "ISIC_0000028.jpg -- jaccard index: 0.9452270865440369\n",
      "ISIC_0012107.jpg -- jaccard index: 0.8341735601425171\n",
      "ISIC_0010374.jpg -- jaccard index: 0.9330117106437683\n",
      "ISIC_0014930.jpg -- jaccard index: 0.9331967830657959\n",
      "ISIC_0014026.jpg -- jaccard index: 0.8779345750808716\n",
      "ISIC_0000219.jpg -- jaccard index: 0.8588316440582275\n",
      "ISIC_0014666.jpg -- jaccard index: 0.8739559650421143\n",
      "ISIC_0015309.jpg -- jaccard index: 0.9550997018814087\n",
      "ISIC_0015412.jpg -- jaccard index: 0.870412290096283\n",
      "ISIC_0000046.jpg -- jaccard index: 0.9126598238945007\n",
      "ISIC_0010494.jpg -- jaccard index: 0.9193841218948364\n",
      "ISIC_0011129.jpg -- jaccard index: 0.9059129953384399\n",
      "ISIC_0012988.jpg -- jaccard index: 0.9442324638366699\n",
      "ISIC_0012786.jpg -- jaccard index: 0.0002942639112006873\n",
      "ISIC_0001306.jpg -- jaccard index: 0.6508628726005554\n",
      "ISIC_0014190.jpg -- jaccard index: 0.664252758026123\n",
      "ISIC_0014632.jpg -- jaccard index: 0.35457295179367065\n",
      "ISIC_0013565.jpg -- jaccard index: 0.2164575755596161\n",
      "ISIC_0000149.jpg -- jaccard index: 0.8808916211128235\n",
      "ISIC_0010070.jpg -- jaccard index: 0.782609760761261\n",
      "ISIC_0014028.jpg -- jaccard index: 0.8832994103431702\n",
      "ISIC_0014476.jpg -- jaccard index: 0.6059276461601257\n",
      "ISIC_0013458.jpg -- jaccard index: 0.9240773320198059\n",
      "ISIC_0014974.jpg -- jaccard index: 0.9544796347618103\n",
      "ISIC_0012661.jpg -- jaccard index: 0.7523165941238403\n",
      "ISIC_0009967.jpg -- jaccard index: 0.9557397365570068\n",
      "ISIC_0000095.jpg -- jaccard index: 0.8930450081825256\n",
      "ISIC_0003346.jpg -- jaccard index: 0.898302435874939\n",
      "ISIC_0012521.jpg -- jaccard index: 0.9395992159843445\n",
      "ISIC_0014150.jpg -- jaccard index: 0.9327275156974792\n",
      "ISIC_0014089.jpg -- jaccard index: 0.8904656767845154\n",
      "ISIC_0010847.jpg -- jaccard index: 0.5229910016059875\n",
      "ISIC_0014794.jpg -- jaccard index: 0.9656991958618164\n",
      "ISIC_0013815.jpg -- jaccard index: 0.8250666856765747\n",
      "ISIC_0015241.jpg -- jaccard index: 0.8896613717079163\n",
      "ISIC_0015949.jpg -- jaccard index: 0.9490889310836792\n",
      "ISIC_0014486.jpg -- jaccard index: 0.7963442802429199\n",
      "ISIC_0000525.jpg -- jaccard index: 0.9443255662918091\n",
      "ISIC_0015211.jpg -- jaccard index: 0.5402029156684875\n",
      "ISIC_0000297.jpg -- jaccard index: 0.9476820230484009\n",
      "ISIC_0014688.jpg -- jaccard index: 0.6729105710983276\n",
      "ISIC_0016012.jpg -- jaccard index: 0.7681931257247925\n",
      "ISIC_0000029.jpg -- jaccard index: 0.9296414852142334\n",
      "ISIC_0000157.jpg -- jaccard index: 0.9294126033782959\n",
      "ISIC_0009914.jpg -- jaccard index: 0.9408040642738342\n",
      "ISIC_0000353.jpg -- jaccard index: 0.9133118987083435\n",
      "ISIC_0010024.jpg -- jaccard index: 0.37155866622924805\n",
      "ISIC_0012137.jpg -- jaccard index: 0.8387690782546997\n",
      "ISIC_0000112.jpg -- jaccard index: 0.8146174550056458\n",
      "ISIC_0013832.jpg -- jaccard index: 0.7840715050697327\n",
      "ISIC_0009599.jpg -- jaccard index: 0.9213525056838989\n",
      "ISIC_0008256.jpg -- jaccard index: 0.939876139163971\n",
      "ISIC_0013580.jpg -- jaccard index: 0.9197485446929932\n",
      "ISIC_0000167.jpg -- jaccard index: 0.8534395098686218\n",
      "ISIC_0015057.jpg -- jaccard index: 0.8329932689666748\n",
      "ISIC_0000376.jpg -- jaccard index: 0.8104261159896851\n",
      "ISIC_0000135.jpg -- jaccard index: 0.9501884579658508\n",
      "ISIC_0012135.jpg -- jaccard index: 0.8399295806884766\n",
      "ISIC_0013672.jpg -- jaccard index: 0.7994260191917419\n",
      "ISIC_0012855.jpg -- jaccard index: 0.9011146426200867\n",
      "ISIC_0010023.jpg -- jaccard index: 0.9196476340293884\n",
      "ISIC_0013065.jpg -- jaccard index: 0.3743579089641571\n",
      "ISIC_0001190.jpg -- jaccard index: 0.8609631061553955\n",
      "ISIC_0011330.jpg -- jaccard index: 0.8661102056503296\n",
      "ISIC_0012372.jpg -- jaccard index: 0.6233895421028137\n",
      "ISIC_0012677.jpg -- jaccard index: 0.8739778399467468\n",
      "ISIC_0000470.jpg -- jaccard index: 0.9072729349136353\n",
      "ISIC_0012228.jpg -- jaccard index: 0.9098867177963257\n",
      "ISIC_0014936.jpg -- jaccard index: 0.855283796787262\n",
      "ISIC_0013167.jpg -- jaccard index: 0.9521182179450989\n",
      "ISIC_0012856.jpg -- jaccard index: 0.5057135224342346\n",
      "ISIC_0014419.jpg -- jaccard index: 0.4799105226993561\n",
      "ISIC_0000155.jpg -- jaccard index: 0.9772805571556091\n",
      "ISIC_0012518.jpg -- jaccard index: 0.5513722896575928\n",
      "ISIC_0014735.jpg -- jaccard index: 0.959889829158783\n",
      "ISIC_0012469.jpg -- jaccard index: 0.4527767598628998\n",
      "ISIC_0012311.jpg -- jaccard index: 0.8557546734809875\n",
      "ISIC_0010459.jpg -- jaccard index: 0.9517493844032288\n",
      "ISIC_0015440.jpg -- jaccard index: 0.7600241899490356\n",
      "ISIC_0013428.jpg -- jaccard index: 0.9088732004165649\n",
      "ISIC_0009953.jpg -- jaccard index: 0.9181489944458008\n",
      "ISIC_0000268.jpg -- jaccard index: 0.9387564659118652\n",
      "ISIC_0000137.jpg -- jaccard index: 0.9465822577476501\n",
      "ISIC_0012520.jpg -- jaccard index: 0.781044602394104\n",
      "ISIC_0000397.jpg -- jaccard index: 0.8484826683998108\n",
      "ISIC_0010241.jpg -- jaccard index: 0.8449974060058594\n",
      "ISIC_0000179.jpg -- jaccard index: 0.8237748146057129\n",
      "ISIC_0013615.jpg -- jaccard index: 0.8497236371040344\n",
      "ISIC_0015563.jpg -- jaccard index: 0.7016595005989075\n",
      "ISIC_0016044.jpg -- jaccard index: 0.7888196706771851\n",
      "ISIC_0012156.jpg -- jaccard index: 0.889623761177063\n",
      "ISIC_0000160.jpg -- jaccard index: 0.9694005846977234\n",
      "ISIC_0012213.jpg -- jaccard index: 0.8930183053016663\n",
      "ISIC_0000355.jpg -- jaccard index: 0.9520888924598694\n",
      "ISIC_0000190.jpg -- jaccard index: 0.9568315744400024\n",
      "ISIC_0014745.jpg -- jaccard index: 0.9565978646278381\n",
      "ISIC_0000367.jpg -- jaccard index: 0.8517395853996277\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "ISIC_0005548.jpg -- jaccard index: 0.9193066358566284\n",
      "ISIC_0010219.jpg -- jaccard index: 0.8039007186889648\n",
      "ISIC_0012969.jpg -- jaccard index: 0.7094855308532715\n",
      "ISIC_0011135.jpg -- jaccard index: 0.9212905168533325\n",
      "ISIC_0001188.jpg -- jaccard index: 0.8130499720573425\n",
      "ISIC_0011301.jpg -- jaccard index: 0.9427648782730103\n",
      "ISIC_0015040.jpg -- jaccard index: 0.6441420316696167\n",
      "ISIC_0013203.jpg -- jaccard index: 0.6381925344467163\n",
      "ISIC_0007332.jpg -- jaccard index: 0.8561199307441711\n",
      "ISIC_0001118.jpg -- jaccard index: 0.9365506172180176\n",
      "ISIC_0010255.jpg -- jaccard index: 0.8826594948768616\n",
      "ISIC_0011101.jpg -- jaccard index: 0.9423109889030457\n",
      "ISIC_0009918.jpg -- jaccard index: 0.8001259565353394\n",
      "ISIC_0010335.jpg -- jaccard index: 0.891241192817688\n",
      "ISIC_0009758.jpg -- jaccard index: 0.8422152996063232\n",
      "ISIC_0016025.jpg -- jaccard index: 0.730634868144989\n",
      "ISIC_0013403.jpg -- jaccard index: 0.9313302636146545\n",
      "ISIC_0000200.jpg -- jaccard index: 0.8109307885169983\n",
      "ISIC_0010861.jpg -- jaccard index: 0.890184760093689\n",
      "ISIC_0013325.jpg -- jaccard index: 0.8255377411842346\n",
      "ISIC_0016029.jpg -- jaccard index: 0.4177224934101105\n",
      "ISIC_0015510.jpg -- jaccard index: 0.8913220763206482\n",
      "ISIC_0013321.jpg -- jaccard index: 0.11307411640882492\n",
      "ISIC_0000246.jpg -- jaccard index: 0.8619463443756104\n",
      "ISIC_0015948.jpg -- jaccard index: 0.8250244855880737\n",
      "ISIC_0014248.jpg -- jaccard index: 0.4464263916015625\n",
      "ISIC_0014780.jpg -- jaccard index: 0.769411563873291\n",
      "ISIC_0001286.jpg -- jaccard index: 0.8747658133506775\n",
      "ISIC_0011162.jpg -- jaccard index: 0.892575740814209\n",
      "ISIC_0010347.jpg -- jaccard index: 0.731501042842865\n",
      "ISIC_0013603.jpg -- jaccard index: 0.8519354462623596\n",
      "ISIC_0014657.jpg -- jaccard index: 0.8667330145835876\n",
      "ISIC_0016024.jpg -- jaccard index: 0.569006085395813\n",
      "ISIC_0013034.jpg -- jaccard index: 0.653834879398346\n",
      "ISIC_0014845.jpg -- jaccard index: 0.92976313829422\n",
      "ISIC_0000359.jpg -- jaccard index: 0.9681938290596008\n",
      "ISIC_0014158.jpg -- jaccard index: 0.960564911365509\n",
      "ISIC_0014253.jpg -- jaccard index: 0.9294160008430481\n",
      "ISIC_0000301.jpg -- jaccard index: 0.88624507188797\n",
      "ISIC_0010480.jpg -- jaccard index: 0.8370509743690491\n",
      "ISIC_0012094.jpg -- jaccard index: 0.9093037843704224\n",
      "ISIC_0014848.jpg -- jaccard index: 0.9466423392295837\n",
      "ISIC_0012108.jpg -- jaccard index: 0.8916055560112\n",
      "ISIC_0013695.jpg -- jaccard index: 0.8203055262565613\n",
      "ISIC_0000324.jpg -- jaccard index: 0.8832187652587891\n",
      "ISIC_0003728.jpg -- jaccard index: 0.6720225811004639\n",
      "ISIC_0015153.jpg -- jaccard index: 0.7972405552864075\n",
      "ISIC_0011219.jpg -- jaccard index: 0.9526541829109192\n",
      "ISIC_0013112.jpg -- jaccard index: 0.900700569152832\n",
      "ISIC_0015980.jpg -- jaccard index: 0.9553751945495605\n",
      "ISIC_0012878.jpg -- jaccard index: 0.9374313950538635\n",
      "ISIC_0010444.jpg -- jaccard index: 0.8699060082435608\n",
      "ISIC_0009898.jpg -- jaccard index: 0.8400397300720215\n",
      "ISIC_0012260.jpg -- jaccard index: 0.6952794194221497\n",
      "ISIC_0000387.jpg -- jaccard index: 0.9188957810401917\n",
      "ISIC_0012464.jpg -- jaccard index: 0.3798411786556244\n",
      "ISIC_0010017.jpg -- jaccard index: 0.8668702244758606\n",
      "ISIC_0000034.jpg -- jaccard index: 0.9564769864082336\n",
      "ISIC_0014722.jpg -- jaccard index: 0.9517930746078491\n",
      "ISIC_0016066.jpg -- jaccard index: 0.7592898607254028\n",
      "ISIC_0000299.jpg -- jaccard index: 0.8761619925498962\n",
      "ISIC_0010851.jpg -- jaccard index: 0.8065454959869385\n",
      "ISIC_0000203.jpg -- jaccard index: 0.9767482876777649\n",
      "ISIC_0010595.jpg -- jaccard index: 0.8811514377593994\n",
      "ISIC_0012323.jpg -- jaccard index: 0.19933047890663147\n",
      "ISIC_0000142.jpg -- jaccard index: 0.9286624193191528\n",
      "ISIC_0000020.jpg -- jaccard index: 0.743686854839325\n",
      "ISIC_0000173.jpg -- jaccard index: 0.9028258919715881\n",
      "ISIC_0000476.jpg -- jaccard index: 0.804690957069397\n",
      "ISIC_0013044.jpg -- jaccard index: 0.8544241189956665\n",
      "ISIC_0000032.jpg -- jaccard index: 0.7539986371994019\n",
      "ISIC_0015476.jpg -- jaccard index: 0.9188433289527893\n",
      "ISIC_0009965.jpg -- jaccard index: 0.8189020752906799\n",
      "ISIC_0014838.jpg -- jaccard index: 0.7929225564002991\n",
      "ISIC_0000249.jpg -- jaccard index: 0.9382224082946777\n",
      "ISIC_0015008.jpg -- jaccard index: 0.7384477257728577\n",
      "ISIC_0013678.jpg -- jaccard index: 0.9309755563735962\n",
      "ISIC_0011161.jpg -- jaccard index: 0.6108554005622864\n",
      "ISIC_0012415.jpg -- jaccard index: 0.8236263990402222\n",
      "ISIC_0010265.jpg -- jaccard index: 0.724488377571106\n",
      "ISIC_0014723.jpg -- jaccard index: 0.806086540222168\n",
      "ISIC_0000319.jpg -- jaccard index: 0.9630478620529175\n",
      "ISIC_0014987.jpg -- jaccard index: 0.7702219486236572\n",
      "ISIC_0014526.jpg -- jaccard index: 0.8048316836357117\n",
      "ISIC_0014506.jpg -- jaccard index: 0.4458760619163513\n",
      "ISIC_0012708.jpg -- jaccard index: 0.8832936882972717\n",
      "ISIC_0000392.jpg -- jaccard index: 0.7067844271659851\n",
      "ISIC_0010476.jpg -- jaccard index: 0.8048830032348633\n",
      "ISIC_0014183.jpg -- jaccard index: 0.451080322265625\n",
      "ISIC_0014724.jpg -- jaccard index: 0.9101940989494324\n",
      "ISIC_0000252.jpg -- jaccard index: 0.8754150867462158\n",
      "ISIC_0001769.jpg -- jaccard index: 0.9460517168045044\n",
      "ISIC_0012690.jpg -- jaccard index: 0.9103035926818848\n",
      "ISIC_0014968.jpg -- jaccard index: 0.8767760396003723\n",
      "ISIC_0014580.jpg -- jaccard index: 0.7003404498100281\n",
      "ISIC_0010056.jpg -- jaccard index: 0.7838553190231323\n",
      "ISIC_0016065.jpg -- jaccard index: 0.8976485133171082\n",
      "ISIC_0013966.jpg -- jaccard index: 0.10704299062490463\n",
      "ISIC_0004309.jpg -- jaccard index: 0.7666139602661133\n",
      "ISIC_0013738.jpg -- jaccard index: 0.9015629291534424\n",
      "ISIC_0000119.jpg -- jaccard index: 0.8895588517189026\n",
      "ISIC_0000081.jpg -- jaccard index: 0.8468671441078186\n",
      "ISIC_0011118.jpg -- jaccard index: 0.8664132356643677\n",
      "ISIC_0012950.jpg -- jaccard index: 0.9264026880264282\n",
      "ISIC_0005666.jpg -- jaccard index: 0.8679245710372925\n",
      "ISIC_0000477.jpg -- jaccard index: 0.821677565574646\n",
      "ISIC_0000322.jpg -- jaccard index: 0.8416136503219604\n",
      "ISIC_0016040.jpg -- jaccard index: 0.8357340693473816\n",
      "ISIC_0010028.jpg -- jaccard index: 0.9440012574195862\n",
      "ISIC_0014394.jpg -- jaccard index: 0.7880149483680725\n",
      "ISIC_0015125.jpg -- jaccard index: 0.956909716129303\n",
      "ISIC_0012654.jpg -- jaccard index: 0.7911557555198669\n",
      "ISIC_0013793.jpg -- jaccard index: 0.8811227679252625\n",
      "ISIC_0010349.jpg -- jaccard index: 0.9004325866699219\n",
      "ISIC_0015223.jpg -- jaccard index: 0.9667648077011108\n",
      "ISIC_0013459.jpg -- jaccard index: 0.8165123462677002\n",
      "ISIC_0010069.jpg -- jaccard index: 0.9390845894813538\n",
      "ISIC_0013610.jpg -- jaccard index: 0.8193039298057556\n",
      "ISIC_0012735.jpg -- jaccard index: 0.9457423686981201\n",
      "ISIC_0013390.jpg -- jaccard index: 0.8411353230476379\n",
      "ISIC_0000075.jpg -- jaccard index: 0.9637355804443359\n",
      "ISIC_0012940.jpg -- jaccard index: 0.7430126667022705\n",
      "ISIC_0015293.jpg -- jaccard index: 0.8319004774093628\n",
      "ISIC_0000221.jpg -- jaccard index: 0.9177185893058777\n",
      "ISIC_0010215.jpg -- jaccard index: 0.889800488948822\n",
      "ISIC_0015483.jpg -- jaccard index: 0.7631571292877197\n",
      "ISIC_0000212.jpg -- jaccard index: 0.9073783755302429\n",
      "ISIC_0016045.jpg -- jaccard index: 0.8886469602584839\n",
      "ISIC_0005555.jpg -- jaccard index: 0.8260907530784607\n",
      "ISIC_0000330.jpg -- jaccard index: 0.9091631770133972\n",
      "ISIC_0014932.jpg -- jaccard index: 0.5738357901573181\n",
      "ISIC_0010233.jpg -- jaccard index: 0.9757044315338135\n",
      "ISIC_0012887.jpg -- jaccard index: 0.8468069434165955\n",
      "ISIC_0015969.jpg -- jaccard index: 0.42508023977279663\n",
      "ISIC_0013803.jpg -- jaccard index: 0.776638388633728\n",
      "ISIC_0015981.jpg -- jaccard index: 0.9597526788711548\n",
      "ISIC_0010262.jpg -- jaccard index: 0.8553798198699951\n",
      "ISIC_0015971.jpg -- jaccard index: 0.9413205981254578\n",
      "ISIC_0013160.jpg -- jaccard index: 0.6777951121330261\n",
      "ISIC_0000518.jpg -- jaccard index: 0.9103172421455383\n",
      "ISIC_0013178.jpg -- jaccard index: 0.6624796390533447\n",
      "ISIC_0010372.jpg -- jaccard index: 0.8135813474655151\n",
      "ISIC_0000087.jpg -- jaccard index: 0.9485347867012024\n",
      "ISIC_0000089.jpg -- jaccard index: 0.9086865782737732\n",
      "ISIC_0016000.jpg -- jaccard index: 0.7150087356567383\n",
      "ISIC_0014603.jpg -- jaccard index: 0.885705292224884\n",
      "ISIC_0014844.jpg -- jaccard index: 0.8970224261283875\n",
      "ISIC_0012259.jpg -- jaccard index: 0.8759840726852417\n",
      "ISIC_0013702.jpg -- jaccard index: 0.5682774186134338\n",
      "ISIC_0013897.jpg -- jaccard index: 0.8690342903137207\n",
      "ISIC_0013320.jpg -- jaccard index: 0.9314910769462585\n",
      "ISIC_0013721.jpg -- jaccard index: 0.7207886576652527\n",
      "ISIC_0013052.jpg -- jaccard index: 0.8266763687133789\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "ISIC_0000204.jpg -- jaccard index: 0.9342555999755859\n",
      "ISIC_0012840.jpg -- jaccard index: 0.9095937609672546\n",
      "ISIC_0016037.jpg -- jaccard index: 0.8352704644203186\n",
      "ISIC_0014410.jpg -- jaccard index: 0.447541743516922\n",
      "ISIC_0012201.jpg -- jaccard index: 0.9444417953491211\n",
      "ISIC_0013690.jpg -- jaccard index: 0.6413149833679199\n",
      "ISIC_0013972.jpg -- jaccard index: 0.7116392850875854\n",
      "ISIC_0006021.jpg -- jaccard index: 0.8812286853790283\n",
      "ISIC_0012164.jpg -- jaccard index: 0.8187234401702881\n",
      "ISIC_0015212.jpg -- jaccard index: 0.930644690990448\n",
      "ISIC_0014726.jpg -- jaccard index: 0.690467357635498\n",
      "ISIC_0000313.jpg -- jaccard index: 0.899148166179657\n",
      "ISIC_0000370.jpg -- jaccard index: 0.8962568640708923\n",
      "ISIC_0015034.jpg -- jaccard index: 0.9662836790084839\n",
      "ISIC_0001191.jpg -- jaccard index: 0.8642525672912598\n",
      "ISIC_0011202.jpg -- jaccard index: 0.8924583196640015\n",
      "ISIC_0013109.jpg -- jaccard index: 0.9191377758979797\n",
      "ISIC_0000247.jpg -- jaccard index: 0.8675437569618225\n",
      "ISIC_0010321.jpg -- jaccard index: 0.8861387372016907\n",
      "ISIC_0014076.jpg -- jaccard index: 0.7264320850372314\n",
      "ISIC_0014708.jpg -- jaccard index: 0.8645821213722229\n",
      "ISIC_0011084.jpg -- jaccard index: 0.820979118347168\n",
      "ISIC_0014273.jpg -- jaccard index: 0.8393078446388245\n",
      "ISIC_0015360.jpg -- jaccard index: 0.7876108288764954\n",
      "ISIC_0001213.jpg -- jaccard index: 0.8681302666664124\n",
      "ISIC_0008236.jpg -- jaccard index: 0.9126209616661072\n",
      "ISIC_0013230.jpg -- jaccard index: 0.9297220706939697\n",
      "ISIC_0013275.jpg -- jaccard index: 0.865900993347168\n",
      "ISIC_0013863.jpg -- jaccard index: 0.0022222218103706837\n",
      "ISIC_0015963.jpg -- jaccard index: 0.9093754291534424\n",
      "ISIC_0015016.jpg -- jaccard index: 0.9294118881225586\n",
      "ISIC_0011374.jpg -- jaccard index: 0.718663215637207\n",
      "ISIC_0009868.jpg -- jaccard index: 0.8316621780395508\n",
      "ISIC_0015968.jpg -- jaccard index: 0.673797070980072\n",
      "ISIC_0010346.jpg -- jaccard index: 0.8082427382469177\n",
      "ISIC_0010232.jpg -- jaccard index: 0.824479877948761\n",
      "ISIC_0014434.jpg -- jaccard index: 0.24244508147239685\n",
      "ISIC_0011139.jpg -- jaccard index: 0.8682287931442261\n",
      "ISIC_0012258.jpg -- jaccard index: 0.4765471816062927\n",
      "ISIC_0007557.jpg -- jaccard index: 0.9238356351852417\n",
      "ISIC_0012742.jpg -- jaccard index: 0.20158825814723969\n",
      "ISIC_0012884.jpg -- jaccard index: 0.8958326578140259\n",
      "ISIC_0015030.jpg -- jaccard index: 0.881729245185852\n",
      "ISIC_0000162.jpg -- jaccard index: 0.9653981328010559\n",
      "ISIC_0011130.jpg -- jaccard index: 0.6335615515708923\n",
      "ISIC_0012235.jpg -- jaccard index: 0.9128738045692444\n",
      "ISIC_0012883.jpg -- jaccard index: 0.8353312611579895\n",
      "ISIC_0009252.jpg -- jaccard index: 0.8323664665222168\n",
      "ISIC_0000492.jpg -- jaccard index: 0.8672032952308655\n",
      "ISIC_0014361.jpg -- jaccard index: 0.889859676361084\n",
      "ISIC_0013238.jpg -- jaccard index: 0.8822853565216064\n",
      "ISIC_0014680.jpg -- jaccard index: 0.9032437205314636\n",
      "ISIC_0013224.jpg -- jaccard index: 0.9308228492736816\n",
      "ISIC_0015174.jpg -- jaccard index: 0.9006023406982422\n",
      "ISIC_0014316.jpg -- jaccard index: 0.846401035785675\n",
      "ISIC_0007322.jpg -- jaccard index: 0.8564491868019104\n",
      "ISIC_0012136.jpg -- jaccard index: 0.28595858812332153\n",
      "ISIC_0015962.jpg -- jaccard index: 0.909739077091217\n",
      "ISIC_0000479.jpg -- jaccard index: 0.7882819175720215\n",
      "ISIC_0000366.jpg -- jaccard index: 0.9080297350883484\n"
     ]
    }
   ],
   "source": [
    "#model.load_weights(\"unet/20190519/unet_lesion_20190519_059-0.80857.hdf5\")\n",
    "model.load_weights(\"unet/20190519/unet_lesion_20190519_059-0.80857.hdf5\")\n",
    "\n",
    "file_names = next(os.walk(test_data_dir))[2]\n",
    "scores = []\n",
    "for file in file_names:\n",
    "    grey_img = load_img(os.path.join(test_data_dir,file), target_size=(img_rows, img_cols), grayscale=False)\n",
    "    mask_img = load_img(os.path.join(test_data_mask_dir,file.split('.')[0]+\"_segmentation.png\"), \n",
    "                        target_size=(img_rows, img_cols), grayscale=True)\n",
    "    img = img_to_array(grey_img)\n",
    "    img_mask = img_to_array(mask_img)\n",
    "    \n",
    "    #Preprocess image mask\n",
    "    #img_mask = img_mask /255\n",
    "    #img_mask[img_mask > 0.5] = 1\n",
    "    #img_mask[img_mask <= 0.5] = 0\n",
    "    #Preprocess images\n",
    "    #mean = np.mean(img)  # mean for data centering\n",
    "    #std = np.std(img)  # std for data normalization\n",
    "    #img -= mean\n",
    "    #img /= std\n",
    "    img, img_mask = normalizeData(img, img_mask)\n",
    "    img = np.reshape(img,(1,)+img.shape)\n",
    "    \n",
    "    \n",
    "    \n",
    "    pred = model.predict([img])\n",
    "    sess = tf.Session()\n",
    "    score = sess.run(jaccard_coef(img_mask, pred))\n",
    "    print(\"{} -- jaccard index: {}\".format(file,score))\n",
    "    scores.append([file,score])\n",
    "\n",
    "    result_img = array_to_img(pred[0] * 255 )\n",
    "    result_img.save(os.path.join(test_data_pred_dir, file.split('.')[0] + '_predict.jpg'))\n",
    "\n",
    "with open(\"unet_test_result.csv\", 'w') as f:\n",
    "    f.write(\"filename, jaccard_index\\n\")\n",
    "    for i in range(len(scores)):\n",
    "        #print(scores[i])\n",
    "        f.write(\"{},{}\\n\".format(scores[i][0], scores[i][1]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "def jaccard_index_log_loss(y_true, y_pred):\n",
    "    j = -K.log(jaccard_coef(y_true, y_pred))\n",
    "    #l = - np.power(1-j, 1) * K.log(j)\n",
    "    return j"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "model.compile(optimizer=Adam(lr=5e-6), loss='categorical_crossentropy', metrics=[jaccard_coef,'acc'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 94/200\n"
     ]
    },
    {
     "ename": "ValueError",
     "evalue": "You are passing a target array of shape (6, 224, 224, 1) while using as loss `categorical_crossentropy`. `categorical_crossentropy` expects targets to be binary matrices (1s and 0s) of shape (samples, classes). If your targets are integer classes, you can convert them to the expected format via:\n```\nfrom keras.utils import to_categorical\ny_binary = to_categorical(y_int)\n```\n\nAlternatively, you can use the loss function `sparse_categorical_crossentropy` instead, which does expect integer targets.",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mValueError\u001b[0m                                Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-23-135a2c43de3a>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m      6\u001b[0m     \u001b[0minitial_epoch\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m93\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      7\u001b[0m     \u001b[0mvalidation_data\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mmyValGene\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 8\u001b[0;31m     validation_steps=100)\n\u001b[0m",
      "\u001b[0;32m/anaconda/envs/py36/lib/python3.6/site-packages/keras/legacy/interfaces.py\u001b[0m in \u001b[0;36mwrapper\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m     89\u001b[0m                 warnings.warn('Update your `' + object_name +\n\u001b[1;32m     90\u001b[0m                               '` call to the Keras 2 API: ' + signature, stacklevel=2)\n\u001b[0;32m---> 91\u001b[0;31m             \u001b[0;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     92\u001b[0m         \u001b[0mwrapper\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_original_function\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     93\u001b[0m         \u001b[0;32mreturn\u001b[0m \u001b[0mwrapper\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/anaconda/envs/py36/lib/python3.6/site-packages/keras/engine/training.py\u001b[0m in \u001b[0;36mfit_generator\u001b[0;34m(self, generator, steps_per_epoch, epochs, verbose, callbacks, validation_data, validation_steps, class_weight, max_queue_size, workers, use_multiprocessing, shuffle, initial_epoch)\u001b[0m\n\u001b[1;32m   2222\u001b[0m                     outs = self.train_on_batch(x, y,\n\u001b[1;32m   2223\u001b[0m                                                \u001b[0msample_weight\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0msample_weight\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2224\u001b[0;31m                                                class_weight=class_weight)\n\u001b[0m\u001b[1;32m   2225\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   2226\u001b[0m                     \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mouts\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlist\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/anaconda/envs/py36/lib/python3.6/site-packages/keras/engine/training.py\u001b[0m in \u001b[0;36mtrain_on_batch\u001b[0;34m(self, x, y, sample_weight, class_weight)\u001b[0m\n\u001b[1;32m   1875\u001b[0m             \u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1876\u001b[0m             \u001b[0msample_weight\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0msample_weight\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1877\u001b[0;31m             class_weight=class_weight)\n\u001b[0m\u001b[1;32m   1878\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0muses_learning_phase\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mK\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlearning_phase\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mint\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1879\u001b[0m             \u001b[0mins\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0my\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0msample_weights\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;36m1.\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/anaconda/envs/py36/lib/python3.6/site-packages/keras/engine/training.py\u001b[0m in \u001b[0;36m_standardize_user_data\u001b[0;34m(self, x, y, sample_weight, class_weight, check_array_lengths, batch_size)\u001b[0m\n\u001b[1;32m   1491\u001b[0m         _check_loss_and_target_compatibility(y,\n\u001b[1;32m   1492\u001b[0m                                              \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_feed_loss_fns\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1493\u001b[0;31m                                              self._feed_output_shapes)\n\u001b[0m\u001b[1;32m   1494\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstateful\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0mbatch_size\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1495\u001b[0m             \u001b[0;32mif\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m%\u001b[0m \u001b[0mbatch_size\u001b[0m \u001b[0;34m!=\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/anaconda/envs/py36/lib/python3.6/site-packages/keras/engine/training.py\u001b[0m in \u001b[0;36m_check_loss_and_target_compatibility\u001b[0;34m(targets, loss_fns, output_shapes)\u001b[0m\n\u001b[1;32m    254\u001b[0m                 raise ValueError(\n\u001b[1;32m    255\u001b[0m                     \u001b[0;34m'You are passing a target array of shape '\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0my\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshape\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m+\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 256\u001b[0;31m                     \u001b[0;34m' while using as loss `categorical_crossentropy`. '\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    257\u001b[0m                     \u001b[0;34m'`categorical_crossentropy` expects '\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    258\u001b[0m                     \u001b[0;34m'targets to be binary matrices (1s and 0s) '\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mValueError\u001b[0m: You are passing a target array of shape (6, 224, 224, 1) while using as loss `categorical_crossentropy`. `categorical_crossentropy` expects targets to be binary matrices (1s and 0s) of shape (samples, classes). If your targets are integer classes, you can convert them to the expected format via:\n```\nfrom keras.utils import to_categorical\ny_binary = to_categorical(y_int)\n```\n\nAlternatively, you can use the loss function `sparse_categorical_crossentropy` instead, which does expect integer targets."
     ]
    }
   ],
   "source": [
    "history2 = model.fit_generator(\n",
    "    myGene,\n",
    "    steps_per_epoch = 300, \n",
    "    epochs=200,\n",
    "    callbacks=[model_checkpoint], \n",
    "    initial_epoch = 93,\n",
    "    validation_data=myValGene,\n",
    "    validation_steps=100)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#This code combined 2 seperate training history together and plot the result\n",
    "hist = {}\n",
    "for i in history.history.keys():\n",
    "    hist_concate = np.array([np.array(history.history[i]), np.array(history2.history[i])]).flatten() \n",
    "    hist[i] = hist_concate\n",
    "# Plot training & validation accuracy values\n",
    "plt.plot(hist['jaccard_coef'])\n",
    "plt.plot(hist['val_jaccard_coef'])\n",
    "plt.title('Coefficiency')\n",
    "plt.ylabel('Coefficiency')\n",
    "plt.xlabel('Epoch')\n",
    "plt.legend(['Train'], loc='upper left')\n",
    "plt.legend(['Validation'], loc='upper left')\n",
    "plt.show()\n",
    "\n",
    "# Plot training & validation loss values\n",
    "plt.plot(hist['loss'])\n",
    "plt.plot(hist['val_loss'])\n",
    "plt.title('Model loss')\n",
    "plt.ylabel('Loss')\n",
    "plt.xlabel('Epoch')\n",
    "plt.legend(['Train'], loc='upper left')\n",
    "plt.legend(['Validation'], loc='upper left')\n",
    "plt.show()\n",
    "\n",
    "coef = np.array(hist['jaccard_coef'])\n",
    "val_coef = np.array(hist['val_jaccard_coef'])\n",
    "print(\"Training co-effiency    : {};\\nValidation co-effiency : {}\".format(coef[coef==max(coef)][0], val_coef[np.argmax(coef)]))\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
